﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;
using HMS_Hospital_Team2._6.BL;
using HMS_Hospital_Team2._6.DA;

namespace HMS_Hospital_Team2._6.GUI
{
    public partial class UcNhanVien : UserControl
    {
        public UcNhanVien()
        {
            InitializeComponent();
        }
        bool checkbutton;
        HMSHospitalEntities context = new HMSHospitalEntities();
        NhanVienBL Nhanvien = new NhanVienBL();
        private void UcNhanVien_Load(object sender, EventArgs e)
        {//Load du lieu tu database len gridview  
            grcthongtinNV_NV.DataSource = Nhanvien.LoadthongtinNV_BL();
            //Load len combobox chuc vu
            cmbChucVu_NV.DataSource = Nhanvien.LoadthongtinChucVu_BL();
            cmbChucVu_NV.DisplayMember = "TenChucVu";
            cmbChucVu_NV.ValueMember = "MaChucVu";
        }


        private void btnSua_NV_Click(object sender, EventArgs e)
        {
            //Chỉnh readonly = false cho tất cả các textfield và checkbox, combobox cho phep chinh sua.
            txtMaNV_NV.Properties.ReadOnly = false;
            txtHovaTen_NV.Properties.ReadOnly = false;
            cmbChucVu_NV.Enabled = false;
            cmbGioitinh_NV.Enabled = true;
            dateNgaysinh_NV.Properties.ReadOnly = false;
            txtDiDong_NV.Properties.ReadOnly = false;
            txtDienThoaiBan_NV.Properties.ReadOnly = false;
            txtTenDangNhap_NV.Properties.ReadOnly = false;
            txtMatkhau_NV.Properties.ReadOnly = false;
            chkNhanvienNL_NV.Properties.ReadOnly = false;
            chkNhanvienTT_NV.Properties.ReadOnly = false;
            chkAdmin_NV.Properties.ReadOnly = false;
            chkTrangThai_NV.Properties.ReadOnly = false;

            //Enable nut Luu va Lam Moi
            btnLuu_NV.Enabled = true;
            btnLamMoi_NV.Enabled = false;
            btnTaomoi_NV.Enabled = false;
            btnSua_NV.Enabled = false;
            //danh dau ng dung dang su dung chuc nang chinh sua
            checkbutton = false;
        }

        private void btnTaomoi_DV_Click(object sender, EventArgs e)
        {
            LamMoi();
            HMSHospitalEntities context = new HMSHospitalEntities();
            var nhanvien = from nv in context.NhanViens
                           select nv;
            int icount = 1;
            foreach (var row in nhanvien)
            {
                icount++;
            }
            //Nut tao moi dc nhan dau tien.
            grcThongtinchung_NV.Enabled = true;
            grcPhanQuyen_NV.Enabled = true;
            btnSua_NV.Enabled = false;
            //nut tao moi dc nhan sau khi ng dung cho xem chi tiết
            txtMaNV_NV.Properties.ReadOnly = false;
            txtHovaTen_NV.Properties.ReadOnly = false;
            cmbGioitinh_NV.Enabled = true;
            dateNgaysinh_NV.Properties.ReadOnly = false;
            cmbChucVu_NV.Enabled = true;
            txtDiDong_NV.Properties.ReadOnly = false;
            txtDienThoaiBan_NV.Properties.ReadOnly = false;
            txtTenDangNhap_NV.Properties.ReadOnly = false;
            txtMatkhau_NV.Properties.ReadOnly = false;
            chkNhanvienNL_NV.Properties.ReadOnly = false;
            chkNhanvienTT_NV.Properties.ReadOnly = false;
            chkAdmin_NV.Properties.ReadOnly = false;
            chkTrangThai_NV.Properties.ReadOnly = false;
            btnLuu_NV.Enabled = true;
            btnLamMoi_NV.Enabled = true;
            LamMoi();
            txtMaNV_NV.Enabled = false;
            if (icount < 100)
            {
                if (icount < 10)
                {
                    txtMaNV_NV.Text = "NV00" + icount;
                }
                else
                {
                    txtMaNV_NV.Text = "NV0" + icount;
                }
            }
            else
            {
                txtMaNV_NV.Text = "NV" + icount;
            }
            //danh dau ng dung dang su dung chuc nang tao moi
            checkbutton = true;
        }

        void LamMoi()
        {
            //Lam moi cac textfield va cac combobox, checkbox...
            txtMaNV_NV.Text = "";
            txtHovaTen_NV.Text = "";
            cmbGioitinh_NV.SelectedIndex = 0;
            dateNgaysinh_NV.Text = "";
            cmbChucVu_NV.SelectedIndex = 0;
            txtDiDong_NV.Text = "";
            txtTenDangNhap_NV.Text = "";
            txtMatkhau_NV.Text = "";
            chkNhanvienNL_NV.Checked = false;
            chkNhanvienTT_NV.Checked = false;
            chkAdmin_NV.Checked = false;
            chkTrangThai_NV.Checked = false;
            txtDienThoaiBan_NV.Text = "";
            txtMaNV_NV.Focus();
        }
        private void btnLamMoi_NV_Click(object sender, EventArgs e)
        {
            LamMoi();
        }
        //Ham them moi nhan vien
        string sMaNhanVien = "";
        string sTenDangNhap = "";
        string sMatKhau = "";
        void ThemMoiNhanVien()
        {
            
            Encrypt md5 = new Encrypt();
            sMaNhanVien = txtMaNV_NV.Text;
            string sHoVaTen = txtHovaTen_NV.Text;
            string sdidong = txtDiDong_NV.Text;
            string sdienthoaiban = txtDienThoaiBan_NV.Text;
            string sMaChucVu = cmbChucVu_NV.SelectedValue.ToString();
            DateTime daNgaySinh = dateNgaysinh_NV.DateTime;
            sTenDangNhap = txtTenDangNhap_NV.Text;
            //ma hoa password
            sMatKhau = md5.congdongcsharp_Encrypt("Encrypt", txtMatkhau_NV.Text);

            //xet Gioi tinh
            bool blGioiTinh;
            if (cmbGioitinh_NV.SelectedIndex == 1)
                blGioiTinh = false;
            else
                blGioiTinh = true;

            //Xet trang thai
            bool blTrangThaisd = true;
            if (chkTrangThai_NV.Checked == true)
            {
                blTrangThaisd = true;
            }
            if (chkTrangThai_NV.Checked == false)
            {
                blTrangThaisd = false;
            }
            BL.NhanVienBL.ThemMoiNV_BL(sMaNhanVien, sHoVaTen, sdidong, sdienthoaiban, blGioiTinh, daNgaySinh, sMaChucVu
            , sTenDangNhap, sMatKhau, blTrangThaisd);
        }
        //Ham phan quyen
        void PhanQuyen(int iquyen, bool bltrangthai)
        {
            int iQuyen = iquyen;
            bool blTrangThaiQuyen = bltrangthai;
            BL.NhanVienBL.PhanQuyen_BL(sMaNhanVien, sTenDangNhap, iQuyen, sMatKhau, blTrangThaiQuyen);
        }


        //Ham cap nhat phan quyen
        void CapNhatPhanQuyen(int iquyen, bool bltrangthai)
        {
            int iQuyen = iquyen;
            bool blTrangThaiQuyen = bltrangthai;
            BL.NhanVienBL.CapNhatPhanQuyen_BL(sMaNhanVien, sTenDangNhap, iQuyen, sMatKhau, blTrangThaiQuyen);
        }
        //hàm cập nhật thông tin nhân viên
        bool blTrangThai = true;
        void CapNhatThongTinNV()
        {
            Encrypt md5 = new Encrypt();
            //lấy mã nhân viên cần chỉnh sửa
            sMaNhanVien = (string)grdThongTinNV_NV.GetRowCellValue(grdThongTinNV_NV.FocusedRowHandle, grdThongTinNV_NV.Columns[0]);
            string sHoVaTen = txtHovaTen_NV.Text;
            string sDidong = txtDiDong_NV.Text;
            string sdienthoaiban = txtDienThoaiBan_NV.Text;
            DateTime daNgaySinh = dateNgaysinh_NV.DateTime;
            string iMaChucVu = cmbChucVu_NV.SelectedValue.ToString();
            sTenDangNhap = txtTenDangNhap_NV.Text;
            sMatKhau = md5.congdongcsharp_Encrypt("Encrypt", txtMatkhau_NV.Text);
            bool blGioiTinh;
            if (cmbGioitinh_NV.SelectedIndex == 1)
                blGioiTinh = false;
            else
                blGioiTinh = true;

            //xet trang thai

            if (chkTrangThai_NV.Checked == true)
            {
                blTrangThai = true;
            }
            if (chkTrangThai_NV.Checked == false)
            {
                blTrangThai = false;
            }
            BL.NhanVienBL.ChinhsuaNV_BL(sMaNhanVien, sHoVaTen, sDidong, sdienthoaiban, blGioiTinh, daNgaySinh, iMaChucVu
            , sTenDangNhap, sMatKhau, blTrangThai);
        }
        //Ham xu li nut Luu
        private void btnLuu_NV_Click(object sender, EventArgs e)
        {
            while (kiemtraloi() == true)
            {
                // Hàm xử lý bắt lỗi kiểm tra khi bị trùng dữ liệu
                if (checkbutton == true)//khi ng dung su dung chuc nang tao moi
                {
                    bool chek = true;
                    chek = BL.NhanVienBL.CheckdataNV_BL(txtMaNV_NV.Text, txtTenDangNhap_NV.Text);
                    if (chek == true)
                    {
                        MessageBox.Show("Mã nhân viên hoặc tên đăng nhập đã tồn tại", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        txtMaNV_NV.Focus();
                        break;
                    }
                    else
                    {
                        ThemMoiNhanVien();
                        for (int i = 1; i <= 3; i++)
                        {
                            if (i == 1)
                            {
                                PhanQuyen(1, chkNhanvienNL_NV.Checked);
                            }
                            else
                            {
                                if (i == 2)
                                {
                                    PhanQuyen(2, chkNhanvienTT_NV.Checked);
                                }
                                else
                                {
                                    PhanQuyen(3, chkAdmin_NV.Checked);
                                }
                            }

                        }
                        MessageBox.Show("Thêm mới thành công!", "Thông báo!", MessageBoxButtons.OK);
                    }
                }
                else//khi ng dung su dung chuc nang chinh sua
                {
                    CapNhatThongTinNV();
                    for (int i = 1; i <= 3; i++)
                    {
                        if (i == 1)
                        {
                            CapNhatPhanQuyen(1, chkNhanvienNL_NV.Checked);
                        }
                        else
                        {
                            if (i == 2)
                            {
                                CapNhatPhanQuyen(2, chkNhanvienTT_NV.Checked);
                            }
                            else
                            {
                                CapNhatPhanQuyen(3, chkAdmin_NV.Checked);
                            }
                        }

                    }
                    MessageBox.Show("Sửa thành công!", "Thông báo!", MessageBoxButtons.OK);
                }
                grcthongtinNV_NV.DataSource = Nhanvien.LoadthongtinNV_BL();
                btnSua_NV.Enabled = true;
                btnTaomoi_NV.Enabled = true;
                LoadThongTinNhanVien();
                break;
            }
        }

        //Hàm xử lý sự kiện load thong tin nhân vien 
        public void LoadThongTinNhanVien()
        {
            //Lam moi cac checkbox
            chkAdmin_NV.Checked = false;
            chkNhanvienNL_NV.Checked = false;
            chkNhanvienTT_NV.Checked = false;
            Encrypt md5 = new Encrypt();
            //Enable 2 bảng bên phải.
            grcThongtinchung_NV.Enabled = true;
            grcPhanQuyen_NV.Enabled = true;
            btnLuu_NV.Enabled = false;
            btnLamMoi_NV.Enabled = false;

            //Chỉnh readonly = true cho tất cả các textfield và checkbox, combobox chi cho phep xem.
            txtMaNV_NV.Properties.ReadOnly = true;
            txtHovaTen_NV.Properties.ReadOnly = true;
            cmbGioitinh_NV.Enabled = false;
            cmbChucVu_NV.Enabled = false;
            dateNgaysinh_NV.Properties.ReadOnly = true;
            txtDiDong_NV.Properties.ReadOnly = true;
            txtTenDangNhap_NV.Properties.ReadOnly = true;
            txtMatkhau_NV.Properties.ReadOnly = true;
            txtDienThoaiBan_NV.Properties.ReadOnly = true;
            chkNhanvienNL_NV.Properties.ReadOnly = true;
            chkNhanvienTT_NV.Properties.ReadOnly = true;
            chkAdmin_NV.Properties.ReadOnly = true;
            chkTrangThai_NV.Properties.ReadOnly = true;
            using (HMSHospitalEntities show = new HMSHospitalEntities())
            {
                // Load thong tin chi tiet cua dong dang chon.
                string sManv = (string)grdThongTinNV_NV.GetRowCellValue(grdThongTinNV_NV.FocusedRowHandle, grdThongTinNV_NV.Columns[0]);
                var ThongTin = (from tt in show.NhanViens
                                where tt.MaNhanVien == sManv
                                select tt).First<NhanVien>();
                txtMaNV_NV.Text = ThongTin.MaNhanVien;
                txtHovaTen_NV.Text = ThongTin.HoVaTen;
                txtDiDong_NV.Text = ThongTin.DiDong;
                txtDienThoaiBan_NV.Text = ThongTin.DienThoaiBan;
                txtTenDangNhap_NV.Text = ThongTin.TenDangNhap;
                txtMatkhau_NV.Text = md5.congdongcsharp_Decrypt("Encrypt", ThongTin.MatKhau);


                //Kiem tra gioi tinh trong database de load len combobox
                if (ThongTin.GioiTinh == false)
                    cmbGioitinh_NV.SelectedIndex = 1;// 1 là Nữ
                else
                    cmbGioitinh_NV.SelectedIndex = 0;// 0 là Nam
                cmbChucVu_NV.SelectedValue = ThongTin.MaChucVu;
                dateNgaysinh_NV.DateTime = ThongTin.NgaySinh.Value;


                var phanquyen = (from pq in show.PhanQuyens
                                 where pq.MaNhanVien == sManv
                                 select pq);
                //Kiem tra quyen trong database va load len checkbox.
                foreach (var row in phanquyen)
                {
                    if (row.MaQuyen == 1 && row.TrangThai == true)//quyen nhan vien nhap lieu
                    {
                        chkNhanvienNL_NV.Checked = true;
                    }
                    else
                    {
                        if (row.MaQuyen == 2 && row.TrangThai == true)//quyen nhan vien thu tien
                        {
                            chkNhanvienTT_NV.Checked = true;
                        }
                        else
                        {
                            //quyen admin
                            if (row.MaQuyen == 3 && row.TrangThai == true)//quyen nhan vien thu tien
                            {
                                chkAdmin_NV.Checked = true;
                            }
                        }
                    }
                }

                //Kiem tra trang thai trong database
                if (ThongTin.TrangThai == true)
                    chkTrangThai_NV.Checked = true;
                else
                    chkTrangThai_NV.Checked = false;
            }
        }
        private void grdThongTinNV_NV_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
        {
            LoadThongTinNhanVien();
            btnSua_NV.Enabled = true;
        }

        //xử ký chỉ cho người dùng nhập số trong trường số điện thoại.
        private void txtDienthoai_NV_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsNumber(e.KeyChar) && !Char.IsControl(e.KeyChar))
                e.Handled = true;
        }

        //xử ký chỉ cho người dùng nhập chữ trong trường họ và tên.
        private void txtHovaTen_NV_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsLetterOrDigit(e.KeyChar) && !Char.IsControl(e.KeyChar) && !Char.IsWhiteSpace(e.KeyChar))
                e.Handled = true;
        }

        //xử ký chỉ cho người dùng nhập chữ và số trong trường tên đăng nhập
        private void txtTenDangNhap_NV_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsLetter(e.KeyChar) && !Char.IsControl(e.KeyChar) && !Char.IsNumber(e.KeyChar))
                e.Handled = true;
        }
        ////xử ký chỉ cho người dùng nhập số và ký tự '-'và '/' trong trường ngày sinh
        private void dateNgaysinh_NV_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsNumber(e.KeyChar) || e.KeyChar == '-' || e.KeyChar == '/' || e.KeyChar != (char)Keys.Back)
                e.Handled = false;
            else
                e.Handled = true;
        }


        public bool kiemtraloi()
        {
            int count = 0;//bien dem loi
            bool check = true;
            bool blhvt = false, blngaysinh = false, bldienthoai = false, bltendn = false, blmatkhau = false;//bien danh dau loi.
            if (txtHovaTen_NV.Text.Trim() == "")//bat loi ng dung chua nhap ho va ten
            {
                blhvt = true;//danh dau vung bi loi
                count++;//tang bien dem

            }
            if (dateNgaysinh_NV.Text == "")//bắt lỗi ng dùng chưa nhập ngày sinh
            {
                blngaysinh = true;
                count++;
            }
            if (txtDienThoaiBan_NV.Text.Trim() == "" && txtDiDong_NV.Text.Trim() == "")//bắt lỗi ng dùng chưa nhập số điện thoại
            {
                bldienthoai = true;
                count++;
            }
            if (txtTenDangNhap_NV.Text.Trim() == "")//bắt lỗi ng dùng chưa nhập tên đăng nhập
            {
                bltendn = true;
                count++;
            }
            if (txtMatkhau_NV.Text.Trim() == "")//bắt lỗi ng dùng chưa nhập mật khẩu.
            {
                blmatkhau = true;
                count++;
            }
            if (count == 0)
            {               
                if (txtDiDong_NV.Text.Length <= 9)
                {
                    MessageBox.Show("Số điện thoại không hợp lệ, độ dài của số điện thoại từ 10-11 số. Vui long kiểm tra lại!", "Thông báo!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    txtDiDong_NV.Focus();
                    check = false;
                }
                else
                {
                    check = true;
                }
                return check;
            }
            else
            {
                if (count > 1)//trường hợp có nhiều hơn 2 lỗi.
                {
                    MessageBox.Show("Vui lòng nhập đầy đủ thông tin vào các trường có dấu '*'", "Thông báo!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else//trường hợp 1 lỗi.
                {
                    if (blhvt == true)
                    {
                        MessageBox.Show("Vui lòng nhập Họ và Tên!", "Thông báo!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        txtHovaTen_NV.Focus();
                    }
                    if (bldienthoai == true)
                    {
                        MessageBox.Show("Vui lòng nhập 1 trong 2 số điện thoại!", "Thông báo!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        txtDiDong_NV.Focus();
                    }
                    if (blngaysinh == true)
                    {
                        MessageBox.Show("Vui lòng chọn ngày sinh!", "Thông báo!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        dateNgaysinh_NV.Focus();
                    }
                    if (bltendn == true)
                    {
                        MessageBox.Show("Vui lòng nhập tên đăng nhập!", "Thông báo!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        txtTenDangNhap_NV.Focus();
                    }
                    if (blmatkhau == true)
                    {
                        MessageBox.Show("Vui lòng nhập mật khẩu!", "Thông báo!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        txtMatkhau_NV.Focus();
                    }
                }
                return false;
            }
        }
    }
}
